<?php


class DbTable_Usuario extends Zend_Db_Table_Abstract
{
    protected $_name = 't_usuario';
    protected $_rowClass = 'Usuario';
    protected $_primary = 'id_usuario';
    protected $_dependentTables = array('DbTable_ListaCompra', 'DbTable_ColaboracaoProduto', 'DbTable_MercadoPreferido');
    
    protected $_referenceMap    = array(
        	'DbTable_Pessoa' => array(
	            'columns'           => array('id_pessoa'), //FK
	            'refTableClass'     => 'DbTable_Pessoa',
	            'refColumns'        => array('id_pessoa')),
                'DbTable_Coordenada' => array(
	            'columns'           => array('id_coordenada'), //FK
	            'refTableClass'     => 'DbTable_Coordenada',
	            'refColumns'        => array('id_coordenada'))
	);
    
    
    /**
     * 
     * @param type $id
     * @return Usuario
     */
    public static function buscarUsuarioPorId($id){
    	$tUsuario = new DbTable_Usuario();
    	return $tUsuario->find($id)->current();
    }
    
    
    public static function buscarUsuariosOrdenadosPorPontuacao(){
         $tUsuario = new DbTable_Usuario();
            
            $usuarios = array();
            
            foreach ($tUsuario->fetchAll(array("st_usuario = ('?')" => TipoBloqueio::DESBLOQUEADO, "nm_pessoa != 'ANONIMO'")) as $usuario) {
                $usuario->getPontuacao();
                
                array_push($usuarios, $usuario);
            }
            
            uasort($usuarios, array('self', 'ordena'));
            
            return $usuarios;
    }
    
    
    public static function hasUsuario($email){
        $tUsuario = new DbTable_Usuario();
        
        $usuarios = $tUsuario->fetchAll(array("ds_email = (?)" => $email));
        
        return $usuarios->count() > 0;
    }

    
    public static function getUsuarios(){
        $tUsuario = new DbTable_Usuario();
        
        $select = $tUsuario->select()->order('id_usuario ASC');
        
        return  $tUsuario->fetchAll($select);                
    }
    
    private static function ordena($a, $b){
            return strcmp($b->getPontuacao(), $a->getPontuacao());
    }

}